package com.cskaoyan.javase._1extends._7initialization._4notice;

/**
 * 注意事项:
 *      1.构造器的作用,在new对象过程中给成员变量赋值,而且在同一个类中是最后执行的
 *              它的作用就分为了两种:
 *              a.一种是new自身对象,给自身成员变量赋值
 *              b.另一种是new该类的子类对象时,给自身父类成员变量赋值
 *        总之,它的作用是赋值,不要误以为构造器执行就会创建对象.
 *
 *      2.子类对象的隐式初始化,需要依赖于父类的无参构造器,如果父类没有
 *          那么子类对象隐式初始化就不存在
 *
 *      3.Object类是存在无参构造的,而且是提供的默认无参
 *
 *      4.this和super在构造器中,是可以表示调用其它构造器的
 *          并且在表示调用构造器时,它们都必须在第一行
 *          这说明this和super在表示调用构造器时,不能同时存在,而且也只能用一次
 *          为什么它们都必须要在第一行?
 *          因为隐式的子类对象初始化
 *
 *
 * @since 17:16
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son(777);
        System.out.println(s.a);
    }
}

class Father {
    int a = 10;

    {
        a = 666;
    }

    public Father(int a) {
        // super();
        this.a = a;
    }

    public Father() {
        // super();
    }
}

class Son extends Father {
    {
        a = 888;
    }

    public Son(int a) {
        // super();
        // int a = 10;
        // Call to 'super()' must be first statement in constructor body
        super(a);
        this.a = 999;
    }
}